import config from '../config/index.js'
import store from '../store/user.js'

export default function request(options) {
  return new Promise((resolve, reject) => {
    const url = config.baseUrl + options.url

    console.log('请求地址:', url) // 调试用
    console.log('请求参数:', options) // 调试用

    // 统一添加Authorization头部
    const headers = {
      'Content-Type': 'application/json',
      ...options.header
    }

    // 如果有token，自动添加Authorization头部
    let token = ''
    try {
      token = store.state.token || uni.getStorageSync('token') || ''
    } catch (e) {
      console.error('获取token失败:', e)
      token = uni.getStorageSync('token') || ''
    }

    if (token) {
      headers.Authorization = token
      console.log('添加Authorization头部:', token) // 调试用
    } else {
      console.log('未找到token，跳过Authorization头部') // 调试用
    }

    uni.request({
      url: url,
      method: options.method || 'GET',
      data: options.data || {},
      timeout: config.timeout,
      header: headers,
      success: (res) => {
        console.log('响应数据:', res) // 调试用

        if (res.statusCode === 200) {
          const result = res.data

          // 检查返回结构
          if (result && typeof result.code === 'number') {
            // 使用统一返回结构，直接返回result，让业务层处理
            if (result.code === 200) {
              console.log('请求成功，返回完整结果:', result) // 调试用
              resolve(result)
            } else {
              console.error('业务错误:', result)
              uni.showToast({
                title: result.message || '操作失败',
                icon: 'none'
              })
              reject(result)
            }
          } else {
            // 兼容旧格式
            console.log('使用兼容格式，返回数据:', result) // 调试用
            resolve(result)
          }
        } else {
          console.error('HTTP错误:', res)
          uni.showToast({
            title: `请求失败: ${res.statusCode}`,
            icon: 'none'
          })
          reject(res)
        }
      },
      fail: (err) => {
        console.error('网络错误:', err) // 调试用
        uni.showToast({
          title: '网络连接失败，请检查网络',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}
